home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / watcom / w_modey / fixed32.cpp < prev    next >
C/C++ Source or Header  |  1994-02-12  |  2KB  |  87 lines

  1. #include <stdio.h>
  2.  
  3. #include "fixed32.hpp"
  4.  
  5. Fixed32 SinTab[256];
  6. Fixed32 CosTab[256];
  7.  
  8.  
  9. void
  10. initFixed32(void)
  11. {
  12.     FILE *fp;
  13.  
  14.     fp = fopen("sintab.dat", "rb");
  15.     fread(SinTab, 4, 256, fp);
  16.     fread(CosTab, 4, 256, fp);
  17.     fclose(fp);
  18. }
  19.  
  20.  
  21. void
  22. CosSin(Iangle theta, Fixed32 *Cos, Fixed32 *Sin)
  23. {
  24.     *Sin = SinTab[theta];
  25.     *Cos = CosTab[theta];
  26. }
  27.  
  28.  
  29. /* ASM fixedpoint math routines
  30. ;--------------------------------------------------
  31. ; Sqrt - Fixed Point Square Root (High/Normal Precision)
  32. ;    IN     : ecx
  33. ;   OUT     : eax
  34. ;  Modified : ebx,ecx,edx
  35. Sqrt         PROC
  36.  
  37. ;This is the High Precision version for the sqrt.
  38. ;It gives the optimal 8.16 precision but takes
  39. ;a little longer (24 iterations, 48 bits intead of
  40. ;16 iterations and 32 bits)
  41.  
  42.     xor     eax,eax         ;eax is root
  43.     mov     ebx,40000000h
  44. sqrt1:
  45.     mov     edx,ecx         ;edx = val
  46.     sub     edx,ebx         ;val - bitsqr
  47.     jb      sqrt2
  48.     sub     edx,eax         ;val - root
  49.     jb      sqrt2
  50.     mov     ecx,edx         ;val >= (root+bitsqr) -> accept subs
  51.     shr     eax,1           ;root >> 1
  52.     or      eax,ebx         ;root | bitsqr
  53.     shr     ebx,2           ;bitsqr>>2
  54.     jnz     sqrt1
  55.     jz      sqrt5
  56. sqrt2:
  57.     shr     eax,1           ;val < (root+bitsqr) -> dont change val
  58.     shr     ebx,2           ;bitsqr>>2
  59.     jnz     sqrt1
  60. ; we now have the 8.8 precision
  61.  
  62. sqrt5:
  63.     mov     ebx,00004000h
  64.     shl     eax,16
  65.     shl     ecx,16
  66. sqrt3:
  67.     mov     edx,ecx         ;edx = val
  68.     sub     edx,ebx         ;val - bitsqr
  69.     jb      sqrt4
  70.     sub     edx,eax         ;val - root
  71.     jb      sqrt4
  72.     mov     ecx,edx         ;val >= (root+bitsqr) -> accept subs
  73.     shr     eax,1           ;root >> 1
  74.     or      eax,ebx         ;root | bitsqr
  75.     shr     ebx,2           ;bitsqr>>2
  76.     jnz     sqrt3
  77.     ret
  78. sqrt4:
  79.     shr     eax,1           ;val < (root+bitsqr) -> dont change val
  80.     shr     ebx,2           ;bitsqr>>2
  81.     jnz     sqrt3
  82.     ret
  83.  
  84. Sqrt           ENDP
  85. */
  86.  
  87.